import { dirname } from "node:path";
import {
  getPackages as getPackagesFunc,
  getPackagesSync as getPackagesSyncFunc,
} from "@manypkg/get-packages";
import { findUpSync } from "find-up";
/**
 * 获取大仓的所有包
 * @param cwd
 */
function findMonorepoRoot(cwd: string = process.cwd()) {
  const lockFile = findUpSync("pnpm-lock.yaml", { cwd, type: "file" });
  return dirname(lockFile || "");
}

/**
 * 获取大仓的所有包
 */

function getPackagesSync() {
  const root = findMonorepoRoot();
  return getPackagesSyncFunc(root);
}

/**
 * 获取大仓的所有包
 */
function getPackages() {
  const root = findMonorepoRoot();
  return getPackagesFunc(root);
}

/**
 * 获取大仓指定的包
 */
async function getPackage(pkgName: string) {
  const { packages } = await getPackages();
  return packages.find((pkg) => pkg.packageJson.name === pkgName);
}

export { findMonorepoRoot, getPackagesSync, getPackages, getPackage };
